#ifndef REDIS_H
#define REDIS_H
#include "hiredis/hiredis.h"
#include <functional>
#include <string>
#include <vector>
#include <unordered_map>
#include <sstream>
using varNameList = std::vector<std::string>;
using varValueMap = std::unordered_map<std::string, std::string>;
class Redis
{
public:
    Redis();
    ~Redis();
    Redis(const Redis&) = delete;
    Redis& operator=(const Redis&) = delete;
    // 连接redis服务器
    bool connect();

    template <typename Value> void SETSTRING(const std::string& key, Value value);

    bool executeCommand(const std::string& key, const std::string& value);

    void storeVariable(const int& sysVarID, const double& sysVarValue);

    // 将标量写入内存数据库
    void storeVariable(const std::string& varName, const double& scalarVar);

    // 将字符串写入内存数据库
    void storeVariable(const std::string& varName, const std::string& stringVar);

    // 将数组写入内存数据库
    void storeVariable(const std::string& varName, const std::vector<double>& arrVar);

    // 根据变量名查询变量值
    bool getVariable(varNameList& nameList, varValueMap& varValueMap);

    bool storeStringVariable(const std::string& varName, const std::string& varValue);

    bool getKeyValue(const std::string& key, std::string& value);

private:
    //hiredis同步上下文对象，负责publish消息
    redisContext* _redisContext;
    std::stringstream ss;
};
#endif